#include <stdio.h>
#include <pthread.h>

/*
 * Cache相关的知识，这是理解这个问题的关键所在
 */

struct 
{
    long a;             /* thread 1 访问 */
    char data[64];
    long b;             /* thread 2 访问 */    
} data;

void *thread_1()
{
    int i ;

    for (i = 0; i < 1000000000; i++) {
        data.a = 0xAAAA;
    }
}

void *thread_2()
{
    int i ;

    for (i = 0; i < 1000000000; i++) {
        data.b = 0xBBBB;
    }
}

int main()
{
    pthread_t id1, id2;

    pthread_create(&id1, NULL, (void *)thread_1, NULL);
    pthread_create(&id2, NULL, (void *)thread_2, NULL);

    /* 需要进行CPU affinity 设置才能100%保证两个线程运行在不同的CPU上 */

    pthread_join(id1, NULL);
    pthread_join(id2, NULL);

    return 0;
}

#if 0

/* 这个运行时间快 */
    Cache相关的知识，这是理解这个问题的关键所在。

#endif
